package com.augusto.sistema.util;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;

import com.augusto.sistema.produto.Produto;
import com.augusto.sistema.venda.Venda;
import com.augusto.sistema.venda.VendaDAO;

public class VendaDAOHibernate implements VendaDAO {

	private Session sessao;

	public Session getSessao() {
		return sessao;
	}

	public void setSessao(Session sessao) {
		this.sessao = sessao;
	}

	@SuppressWarnings({ "unchecked" })
	@Override
	public List<Venda> listar() {
		Criteria lista = sessao.createCriteria(Venda.class);
		return lista.list();
	}

	@Override
	public void excluir(Venda venda) {
		sessao.delete(venda);
	}

	@Override
	public void registraVenda(Venda venda) {
		sessao.save(venda);
	}

	@Override
	public void buscaVendaPeloProduto(Integer idProduto) {

	}

	@Override
	public boolean existeEstoqueProduto(Produto produto) {
		Produto produtoPesquisado = (Produto) this.sessao.get(Produto.class,
				produto.getId());
		if (produtoPesquisado != null) {
			if (produtoPesquisado.getEstoque() > 0) {
				return true;
			}
		}
		return false;
	}

	// @Override
	// public void buscaVendaPeloProduto(Integer idProduto) {
	// String sql = "from Venda v where v.produto_id like :produto_id";
	// Query consultaVendaProduto = this.sessao.createQuery(sql);
	// consultaVendaProduto.setString("idProduto",idProduto);
	// return (Venda) consultaVendaProduto.uniqueResult();
	//
	// }

	@Override
	public Object reduzEstoqueProduto(Produto produto) {
		String hql = "update Produto p set p.estoque = :novoEstoque where p.id = :idProduto";
		Query query = sessao.createQuery(hql);
		query.setInteger("novoEstoque", produto.getEstoque() - 1);
		query.setLong("idProduto", produto.getId());
		query.executeUpdate();
		return null;
	}
}
